let isExecuting = false;
let executionQueue = [];

export function enqueueFunction(asyncFunc) {
	return new Promise((resolve, reject) => {
		const execute = () => {
			isExecuting = true;
			// 调用业务函数，并处理其返回的Promise
			asyncFunc()
				.then((result) => {
					resolve(result); // 将业务函数的结果传递出去
					// 函数执行完成后，检查队列中是否有等待的调用
					if (executionQueue.length > 0) {
						const next = executionQueue.shift();
						next();
					} else {
						isExecuting = false;
					}
				})
				.catch((error) => {
					reject(error); // 如果业务函数抛出错误，也传递出去
					isExecuting = false;
				});
		};

		if (isExecuting) {
			// 如果函数正在执行，将新的调用加入队列
			executionQueue.push(execute);
		} else {
			// 如果函数不在执行，直接执行
			execute();
		}
	});
}

// 使用示例,假设这个方法可能会快速多次调用
function myBusinessFunction() {
	// 这里是业务函数的逻辑，返回一个Promise
	return new Promise((resolve) => {
		console.log('Business function is executing');
		setTimeout(() => {
			resolve('Result of business function');
		}, 1000); // 假设这个业务函数需要1秒钟来完成
	});
}
// 假设这是一个事件触发器，可能会快速多次调用
// enqueueFunction(myBusinessFunction)
